package com.suyin.ximoon.service;

import java.util.List;

import com.suyin.ximoon.exception.ServiceException;
import com.suyin.ximoon.plugin.mybatis.Criteria;

/**
 * 
 * 业务接口 抽象出来的Service
 * 
 * @author guo
 * 
 * @param <T>
 */
public interface BaseService<T> {

	/**
	 * 保存对象
	 * 
	 * @param entity
	 * @return
	 * @throws ServiceException
	 */
	public abstract void insert(T entity) throws ServiceException;

	/**
	 * 批量保存
	 * 
	 * @param list
	 */
	public abstract void insert(List<T> list) throws ServiceException;

	/**
	 * 整体更新
	 * 
	 * @param entity
	 */
	public abstract void update(T entity) throws ServiceException;

	/**
	 * 批量更新
	 * 
	 * @param list
	 */
	public abstract void update(List<T> list) throws ServiceException;

	/**
	 * 根据ID 删除
	 * 
	 * @param id
	 * 
	 */
	public abstract void deleteById(Integer id) throws ServiceException;

	/**
	 * 通过ID查询对象
	 * 
	 * @param id
	 * @return
	 */
	public abstract T queryOne(Integer id) throws ServiceException;

	/**
	 * 根据各种综合条件查询
	 * 
	 * @param criteria
	 * @return
	 */
	public abstract List<T> query(Criteria criteria) throws ServiceException;

	/**
	 * 综合条件查询
	 * 
	 * @param criteria
	 *            参数
	 * @return
	 */
	public abstract T queryOne(Criteria criteria) throws ServiceException;

	/**
	 * 根据各种条件进行统计
	 * 
	 * @param criteria
	 *            参数
	 * @return
	 */
	public abstract Integer count(Criteria criteria) throws ServiceException;

	/**
	 * 根据各种条件进行删除
	 * 
	 * @param criteria
	 */
	public abstract void delete(Criteria criteria) throws ServiceException;

	/**
	 * 根据条件进行修改 criteria 中的params,要填充
	 * 
	 * @param criteria
	 */
	public abstract void update(Criteria criteria) throws ServiceException;

	/**
	 * 批量更新
	 * 
	 * @param criterias
	 */
	public abstract void updateBatch(List<Criteria> criterias) throws ServiceException;

	/**
	 * 保存字段和值
	 * 
	 * @param criteria
	 *            参数
	 */
	public abstract void insert(Criteria criteria) throws ServiceException;

	/**
	 * 批量保存
	 * 
	 * @param criterias
	 *            集合
	 */
	public abstract void insertBatch(List<Criteria> criterias) throws ServiceException;
	/**
	 * 分页查询
	 * @return <T> List<T>
	 */
	public List<T> queryByPage(T entity)  throws ServiceException;;
}
